/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package dao.padrao;

import java.util.List;
import javax.persistence.EntityManager;

/**
 * @param <T> Entidade
 * @param <PK> Tipo de dado do ID
 */
public interface InterfaceDAO<T, PK> {

    /**
     *
     * @param classe Classe a ser utilizada na busca por primary key
     * @param pk Passar a chave primaria (ID)
     * @return Implementar o retorno do objeto pesquisado
     */
    public T buscaID(Class<T> classe, PK pk);

    /**
     *
     * @param entity Entidade a ser utilizada
     * @return Implementar o retorno booleano TRUE se o cadastro foi atualizado
     * no banco e FALSE se não foi possivel cadastrar
     */
    public boolean atualizar(T entity);

    /**
     *
     * @param entity Entidade a ser utilizada
     * @return Implementar o retorno o objeto gravado no banco de dados
     */
    public T salvar(T entity);

    /**
     *
     * @param entity Entidade a ser utilizada
     * @return Implementar o retorno TRUE se a deleção persistiu no banco e
     * FALSE se não foi possivel excluir
     */
    public boolean deletar(T entity);

    /**
     *
     * @param classe Classe a ser utilizada na busca
     * @return Implementar o rertono de uma lista de todos os resultados da
     * classe informada como parametro
     */
    public List<T> buscar(Class<T> classe);

    /**
     *
     * @return Implementar o retorno do EntityManager configurado no
     * persistence.xml
     */
    public EntityManager getEntityManager();

}
